package tempest.server;
import java.util.Hashtable;
import java.util.LinkedList;
import tempest.clients.Client;
import tempest.data.Data;
import tempest.primitives.MudString;

public class PlayerList

{
  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  private static LinkedList <Client> list;
  private static Hashtable <MudString, Client> players;

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static void init()

  {
    list = new LinkedList <Client> ();
    players = new Hashtable <MudString, Client> ();
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static int numPlayers()

  {
    return list.size();
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static Client get(int i)

  {
    return list.get(i);
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static void add(Client c)

  {
    Data d = c.getEntityData();
    MudString name = d.get("attributes").get("name").value();

    list.add(c);
    players.put(name, c);
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static void remove(MudString s)

  {
    Client c = players.remove(s);
    list.remove(c);
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static void remove(Client c)

  {
    Data d = c.getEntityData();
    MudString name = d.get("attributes").get("name").value();
    remove(name);
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static boolean isInGame(MudString s)

  {
    return find(s) != null;
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static Client get(MudString s)

  {
    return players.get(s);
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////

  public static Client find(MudString s)

  {
    for (Client c : list)

    {
      Data d = c.getEntityData();
      MudString name = d.get("attributes").get("name").value();
      if (s.equalsIgnoreCase(name)) return c;
    }

    return null;
  }

  /////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////
}